package com.qf.controller;




import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@RestController
@RequestMapping("/cache")
public class RedisCacheController {
    @Value("${ceshi.shuxing}")
    private String shuxing;

    private StringRedisTemplate redisTemplate;

    @Autowired
    public void setRedisTemplate(StringRedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

//    查询单个
    @GetMapping("/get/{key}")
    @HystrixCommand(fallbackMethod = "sssss")//当前方法开启失败的降级处理  失败的时候要执行fallbackMethod指定的方法 这个方法必须在本类中
    public String getAllBooks(@PathVariable String key){
//      redis 缓存中查找数据
//        int i=10/0;
        String s = redisTemplate.opsForValue().get(key);
        return s;
    }
//  这个方法是getFromRedis 的降级处理 方法  方法的要求 除了名字不一样其他的都一样 参数上的注解可以不写
    public String sssss(String key){

        return "getFromRedis方法失败了执行了ssss方法" ;
    }



//  存入缓存
    @PostMapping("/set/{key}")
    public String save2Redis(@PathVariable String key,@RequestBody  String values){

        redisTemplate.opsForValue().set(key, values);
        return "1";
    }


    @PostMapping("/hset/{key}/{field}/{value}")
    public int hSet(@PathVariable String key,@PathVariable String field,@PathVariable String value){
        redisTemplate.opsForHash().put(key,field,value);
        return 1;
    }

    @PostMapping("/hmset/{key}")
    public int hMSet(@PathVariable String key, @RequestBody Map map){
        redisTemplate.opsForHash().putAll(key,map);
        return 2;
    }

    @GetMapping("/shuxing")
    public String getShuxing() {

        return shuxing;
    }

}
